#ifndef PID_H
#define PID_H

typedef struct PID_t
{
    float kP, kI, kD;       // kP: 比例增益, kI: 积分增益, kD: 微分增益
    float dP, dI, dD;       // dP: 当前值与目标值的误差 e, dI: 累积误差 ∑e, dD: 误差 e 和之前误差差值
    float error, lastError; // error: 当前误差, lastError: 上一次误差
    float maxDeltaI;        // 积分上限
    float output;           // 输出
    float maxOutput;        // 最大输出
    int target;             // 目标值
    int maxTarget;          // 最大的目标
} PID;

void InitPID(PID *pid, float kP, float kI, float kD, float maxDeltaI, float maxOutput, int target, int maxTarget);
float CalculatePID(PID *pid, float target, float current);
#endif